// 1、双层for循环
function distinct(arr) {
    for (let i = 0; i < arr.length; i++) {
        for (let j = i + 1; j < arr.length; j++) {
            if (arr[i] == arr[j]) {
                arr.splice(j, 1);
                j--;
            }
        }
    }
    return arr;
}

// 2、es6的set方法
function distinct1(arr) {
    return Array.from(new Set(arr));
}

// 3、indexOf() 方法 返回第一次出现的下标 
function distinct2(arr) {
    //过滤掉原数组中重复的数字,返回新的数组
    return arr.filter((item, index) => {
        //遍历出数组中数字第一次出现的下标,与数字所在数组的下标相比较，
        //为true就是第一次出现，不是则筛掉
        return arr.indexOf(item) === index
    })
}

function distinct3(arr) {
    //新建一个空数组
    let newArr = [];
    for (var i = 0; i < arr.length; i++) {
        //遍历传入的数组，查找传入数组的值是否存在新数组中
        if (newArr.indexOf(arr[i]) === -1) {
            //不存在就把值push到新数组
            newArr.push(arr[i]);
        }
    }
    //返回新的数组
    return newArr;
}
let arr = [1, 2, 2, 1, 3, 8, 9, 5, 7, 6, 5];
let res = distinct2(arr)
console.log(res);
console.log(arr);

function uniqueObjext(arr) {
    let unique = {};
    arr.forEach(function (item) {
        unique[JSON.stringify(item)] = item;//键名不会重复
    })
    arr = Object.keys(unique).map(function (u) {
        //Object.keys()返回对象的所有键值组成的数组，map方法是一个遍历方法，返回遍历结果组成的数组.将unique对象的键名还原成对象数组
        return JSON.parse(u);
    })
    return arr;
}




// 对象去重
function distinctObj(obj) {
    let res = {};
    obj = obj.reduce((pre, cur) => {
        if (!res[cur.name]) {
            res[cur.name] = true;
            pre.push(cur);
        }
        return pre;
    }, []);
    return obj;
}
let obj = [
    { name: "张三", age: "18" },
    { name: "张三", age: "19" },
    { name: "张三", age: "20" },
    { name: "李四", age: "19" },
    { name: "王五", age: "20" },
    { name: "赵六", age: "21" }
]

// let resObj = distinctObj(obj);
// console.log(resObj);

